import cv2
from _0work_tools import cv_show
"""
@Project: pythonPro1
@Name: _06histE.py
@Author: linxin_liu
@Date: 2022/10/16 11:19
直方图均衡。
"""


def histogram_equal(img):
    # 直方图均衡函数。传入灰度图片。
    # 为统计每个灰度的数量。256个灰度值，索引代表灰度值，若是统计到对应索引，则索引值加1。初始化时全为0。
    gray_value_list = [i * 0 for i in range(0, 256)]
    for i in range(0, len(img)):
        for j in range(0, len(img[0])):
            gray_value = img[i][j]  # 获取一个像素的灰度值。
            gray_value_list[gray_value] = gray_value_list[gray_value] + 1  # 对应灰度值数量加1。
    # 图片灰度值循环映射。
    for i in range(0, len(img)):
        for j in range(0, len(img[0])):
            original_gray_value = img[i][j]  # 获取原图一个像素的灰度值。z
            temp_counts = 0
            for k in range(0, original_gray_value):  # 循环求0~k灰度值数量之和，便于求概率之和。
                temp_counts = temp_counts + gray_value_list[k]
            temp_after = (255*temp_counts) / (len(img)*len(img[0]))  # 算式。
            img[i][j] = temp_after  # G
    return img


def list_f(img):
    gray_value_list = [i * 0 for i in range(0, 256)]
    for i in range(0, len(img)):
        for j in range(0, len(img[0])):
            gray_value = img[i][j]  # 获取一个像素的灰度值。
            gray_value_list[gray_value] = gray_value_list[gray_value] + 1  # 对应灰度值数量加1。
    return gray_value_list


def hist(img, std):
    img_hist = histogram_equal(img)  # 原图均值化后的图，每个Sk灰度值，k=0,1,2...
    std_hist = histogram_equal(std)  # 规定直方图均值化后的图，每个Zq灰度值，q=0,1,2...
    std_std = list_f(std)  # 索引值不为0时，用它的索引


if __name__ == '__main__':
    img_ori = cv2.imread('D:/tools/image_operation/low_ocean.png', cv2.IMREAD_GRAYSCALE)
    img_after = histogram_equal(img_ori)
    cv_show('a', img_after, 6000)
    # cv2.imwrite("D:/tools/image_operation/high_image_after2.png", img_after)
